<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 继承：子类继承父类中的属性和方法（目的是让子类的实例能够调用父类中的属性和方法）

    // 方案一：原型继承
    //     让父类中的属性和方法在子类实例的原型链上
    //     CHILD.prototype = new PARENT();
    //     CHILD.prototype.constructo = CHILD;
    //     特点：
    //        1.不像其他语言中的继承一样（其它语言的继承一般是拷贝继承，也就是子类继承父
    //        类，会把父类中的属性和方法拷贝一份到子类中，供子类的实例调取使用），
    //        它是把父类的原型放到子类实例的原型链上，实例想调取这些方法，
    //        是基于__proto__原型链查找机制完成的
    //        2.子类可以重写父类上的方法（这样会导致父类其它的实例也受到影响）
    //        3.父类中私有或者公有的属性方法，最后都会变为子类中公有的属性和方法

    function A(x) {
      this.x = x
    }
    A.prototype.getX = function () {
      console.log(this.x);
    }

    function B(y) {
      this.y = y
    }
    B.prototype = new A(200)
    B.prototype.constructor = B
    B.prototype.getY = function () {
      console.log(this.y);
    }

    let b1 = new B(100)
    b1.y
    b1.getY()
    b1.getX()
  </script>
</body>

</html>